<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>变量提升和函数提升</title>
    <script>
        /*
         变量提升
         1 使用 var 声明的变量会自动被添加到最接近的环境中
         2 在函数内部，最接近的环境就是函数的局部环境
         3 未声明就使用的变量会成为全局变量（糟糕的做法，不推荐！！！）
         4 建议在初始化变量之前，一定要先声明
        */

    /*    var foo = 1;
        function func(){
            //变量提升
            //var foo;
            console.log(foo);   //undefined
            var foo  = 3;   //相当于先声明var foo; 提升到前面，覆盖了全局变量var foo = 1;
            console.log(foo);   //3
        }
        func();*/


        //函数提升
        /*func();   //函数被调用了
        function func(){
            console.log("函数被调用了");
        }*/


        //函数提升，相当于先声明var func; 然后调用func(),所以报错
        //func();    //直接报错：func is not a function
        var func = function(){
            console.log("函数被调用了");
        }
        func();   //放到后面调用则不会报错
    </script>
</head>
<body>

</body>
</html>